package com.giga.utils;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

public class MyUtils {

    /**
     * 公用的文件上传方法
     *
     * @param multipartFile        request中的文件流对象
     * @param strUploadFiles       服务器保存上传文件(图片)的目录名
     * @param strFileNamePrefix    服务器上传文件的前缀【新前缀+UUID+文件类型后缀】
     * @param objBean              实体类参数【保存上传文件的相对路径】
     * @param beanFilePropertyName 实体类的属性名【保存上传文件相对路径的属性名】
     */

    public static String doSingleFileUpload1(MultipartFile multipartFile, String strUploadFiles, String strFileNamePrefix, Object objBean, String beanFilePropertyName) {

        // 通过System工具类获取当前服务器发布的地址（*）
        String strBasePath = System.getProperty("user.dir");

        String strFullDirectoryPath = strBasePath + File.separator + strUploadFiles + File.separator;
        //判断上传文件的存放目录是否存在，如果不存在，则创建这个目录，然后在上传文件
        File uploadDirectory = new File(strFullDirectoryPath);
        if (!uploadDirectory.exists()) {
            // 创建目录
            uploadDirectory.mkdirs();
        }

        // 上传文件的命名规则
        // 给上传文件进行重新命名
        // 获取原文件名
        String strOriginalFilename = multipartFile.getOriginalFilename();
        // 获取原文件的后缀
        String strFileSuffix = StringUtils.substringAfterLast(strOriginalFilename, ".");
        // UUID生成新的文件名（防止重复）
        // String strFileNewName = 新图片前缀 + UUID.randomUUID().toString() + "." + strFileSuffix;
        String strFileNewName = strFileNamePrefix + UUID.randomUUID() + "." + strFileSuffix;
        // 创建新上传的文件对象
//        String uploadNewFileName = strFullDirectoryPath + File.separator + strFileNewName;
        String uploadNewFileName = strFullDirectoryPath + strFileNewName;
//        System.out.println("图片地址：" + uploadNewFileName2);
        // 新上传的文件
        File uploadNewFile = new File(uploadNewFileName);

        try {
            // 创建上传的文件
            multipartFile.transferTo(uploadNewFile);
            // 这里使用了反射，但是是借助于apache的commons的BeanUtils工具进行实体类的反射处理
            // 文件上传成功以后，将新上传的文件的服务器的相对路径保存到参数实体类的指定的属性字段上
            // "static" + File.separator +
            BeanUtils.setProperty(objBean, beanFilePropertyName, strUploadFiles + File.separator + strFileNewName);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件上传失败：" + e.getMessage());
        }
        return strFileNewName;
    }

}
